# -*- coding:utf-8 -*-

'''正则表达式'''

import re

# \d匹配一个数字，\w匹配一个字母或数字，\s匹配一个空格（包括tab），.匹配任意字符
# *表示任意个字符（包括0个），用+表示至少一个字符，用?表示0个或1个字符，用{n}表示n个字符，用{n,m}表示n-m个字符
# [0-9a-zA-Z\_\-]可以匹配一个数字、字母、下划线、-
# [^abc]匹配除了abc以外的字符
# p(ython|erl)匹配 python或者perl
# \ 转义
# ^表示行的开头，^\d表示必须以数字开头。
# $表示行的结束，\d$表示必须以数字结束。

#\d{3}\-\d{3,8} ：\d{3}匹配3个数字   \-匹配-   \d{3,8}匹配3-8个数字
print re.match(r'^\d{3}-\d{3,8}$','023-68696652')

#先定义正则对象，在匹配
c=re.compile(r'^\d{3}-\d{3,8}$')
print c.match('023-68696652')
'''使用正则切分字符串'''

#一般的split，无法识别连续空格

print 'a b    c'.split(' ')

#re.split

print re.split(r'\s*','a b    c')

#maxsplit表示最多的分割次数
print re.split(r'[\s,]*','af,b,,c      d ,,,g',maxsplit=2)

print re.split(r'[\s,;]+','a,b;c@     d    f')


'''分组'''

#除了简单地判断是否匹配之外，正则表达式还有提取子串的强大功能。用()表示的就是要提取的分组（Group）

m=re.match(r'^(\d{3})-(\d{3,8})$','023-68696652')

#注意到group(0)永远是原始字符串，group(1)、group(2)……表示第1、2、……个子串。
print m.group(0)
print m.group(1)
print m.group(2)

#[]中 -要转义，用\-表示，不然会理解为类似[a-z]范围
#验证邮箱
expression=r'^[0-9a-zA-Z_\-]+@[0-9a-zA-Z]+\.(com|cn|org)$'
print re.match(expression,'562250920@qq.com')
print re.match(expression,'tang562250920@gmail.cn')
print re.match(expression,'t-t_t@163.org')

print re.match('999{2}','99999')
print re.match('(999){2}','9999')